package xyz.mumuwei.youthcourseserver.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import xyz.mumuwei.youthcourseserver.common.dto.LoginUserDto;
import xyz.mumuwei.youthcourseserver.common.dto.PageDto;
import xyz.mumuwei.youthcourseserver.common.lang.Result;
import xyz.mumuwei.youthcourseserver.pojo.User;
import xyz.mumuwei.youthcourseserver.pojo.UserInfo;

import java.util.List;

/**
 * @author mumuwei
 * @since 2022-02-19
 */
public interface UserService extends IService<User> {

    /**
     * 用户登录，获取 token令牌
     * @param loginUserDto 用户名 密码
     * @return token令牌
     */
    Result login(LoginUserDto loginUserDto);

    /**
     * 注册账户功能，用户输入用户名、密码进行注册
     * 只操作 user 表
     * @param loginUserDto 用户注册提交信息，用户名、密码
     * @return 返回注册结果
     */
    Result register(LoginUserDto loginUserDto);

    /**
     * 根据用户token获取用户信息，包括真实姓名等
     * @param id 账户id
     * @return UserDto
     */
    Result userInfoByTokenId(Integer id);

    /**
     * 根据用户id获取用户信息，包括真实姓名等
     * @param id 账户id
     * @return UserDto
     */
    Result userInfoByUserId(Integer id);

    /**
     * 根据用户角色获取 用户(学生、教师、管理员)列表——分页
     * @param pageDto 分页参数
     * @param roleId 角色id
     * @return 用户列表
     */
    IPage<UserInfo> getUserInfoPage(PageDto pageDto, Integer roleId);

    /**
     * 根据角色获取用户列表——不分页
     * @param roleId 角色id
     * @return 用户列表
     */
    List<UserInfo> getUserInfoList(Integer roleId);

    /**
     * 发送手机验证码
     * @param phone 手机号
     * @return 发送结果
     */
    Result sendPhoneCode(String phone);

    /**
     * 更新用户手机号码
     * @param uid 用户id
     * @param phone 手机号
     * @param code 验证码
     * @return 更新结果
     */
    Result updateUserPhone(Integer uid, String phone, String code);

    /**
     * 分页获取系统账户列表
     * @param pageDto 分页参数
     * @return 账户信息列表
     */
    Result getUserPage(PageDto pageDto);

    /**
     * 获取系统账户列表
     * @return 账户信息列表
     */
    Result getUserList();

    /**
     * 获取日活数
     * @return 数据
     */
    Result getDailyLife();

    /**
     * 获取系统内账户、教师、学生、管理员等数量
     * @return 数据
     */
    Result getUserNums();
}
